﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Arthus.Kalkulacija
{
    public partial class stavkaKalkulacije : Form
    {
        public static int IDstavke;
        public static string IDartikla;
        public stavkaKalkulacije(int StavkaID, string ArtikalID)
        {
            InitializeComponent();
            IDstavke = StavkaID;
            IDartikla = ArtikalID;

            posjedObjekat = new Posjed();
            posjedObjekat.PopuniComboBoxVeleprodaja(comboBoxProdajnaJedinica);

            textBoxKataloskiBroj.ReadOnly = true;
            textBoxPDVstopa.ReadOnly = true;
            textBoxVPCenaArtikla.ReadOnly = true;
            textBoxKolicinaArtikla.ReadOnly = true;
            textBoxArtikalNaziv.ReadOnly = true;
            textBoxIspodArtiklaNaziv.ReadOnly = true;
            textBoxMPCenaArtikla.ReadOnly = true;
            textBoxIspodMPCenaArtikla.ReadOnly = true;
        }

        STV stvObjekat = null;
        STV stvObjekat2 = null;
        STV stvObjekat3 = null;
        Posjed posjedObjekat = null;
        Artikal artikalObjekat = null;
        ZAG zagObjekat = null;

        private void PodesavanjeTextBoxovaIzracunavanja() 
        {
            if (textBoxIznosRabata.Text.Trim().Length > 0 && textBoxFakturnaCena.Text.Trim().Length > 0 && textBoxRabatProcenat.Text.Trim().Length > 0 &&
                 textBoxKolicina.Text.Trim().Length > 0 && textBoxNabavnaVrednost.Text.Trim().Length > 0 && textBoxZavisniTroskovi.Text.Trim().Length > 0 &&
                textBoxNabavnaCena.Text.Trim().Length > 0 && textBoxProdajnaVrednost.Text.Trim().Length > 0 && textBoxProdajnaCena.Text.Trim().Length > 0 &&
                textBoxRazlikaUceni.Text.Trim().Length > 0 && textBoxVrednostNivelacije.Text.Trim().Length > 0 && textBoxVPCenaArtikla.Text.Trim().Length > 0 &&
                 textBoxKolicinaZaNivelaciju.Text.Trim().Length > 0) 
            {
                try
                {
                    labelPoruka.Text = "";
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = true;

                    decimal iznosRabata = Convert.ToDecimal(textBoxIznosRabata.Text);
                    decimal fakturnaCena = Convert.ToDecimal(textBoxFakturnaCena.Text);
                    decimal rabatProcenat = Convert.ToDecimal(textBoxRabatProcenat.Text);
                    decimal kolicina = Convert.ToDecimal(textBoxKolicina.Text);
                    decimal nabavnaVrednost = Convert.ToDecimal(textBoxNabavnaVrednost.Text);
                    decimal zavisniTroskovi = Convert.ToDecimal(textBoxZavisniTroskovi.Text);
                    decimal nabavnaCena = Convert.ToDecimal(textBoxNabavnaCena.Text);
                    decimal prodajnaVrednost = Convert.ToDecimal(textBoxProdajnaVrednost.Text);
                    decimal prodajnaCena = Convert.ToDecimal(textBoxProdajnaCena.Text);
                    decimal ruc = Convert.ToDecimal(textBoxRazlikaUceni.Text);
                    decimal vrednostNivelacije = Convert.ToDecimal(textBoxVrednostNivelacije.Text);
                    decimal vpCenaArtikla = Convert.ToDecimal(textBoxVPCenaArtikla.Text);
                    decimal kolicinaZaNivelaciju = Convert.ToDecimal(textBoxKolicinaZaNivelaciju.Text);

                    try
                    {
                        iznosRabata = fakturnaCena * rabatProcenat / 100 * kolicina;
                    }
                    catch (FormatException fe) { }
                    catch (DivideByZeroException dbze) { }
                    nabavnaVrednost = kolicina * fakturnaCena - iznosRabata + zavisniTroskovi;
                    try
                    {
                        nabavnaCena = nabavnaVrednost / kolicina;
                    }
                    catch (FormatException fe) { }
                    catch (DivideByZeroException dbze) { }
                    prodajnaVrednost = prodajnaCena * kolicina;
                    ruc = (prodajnaCena - nabavnaCena) * kolicina;
                    if (kolicinaZaNivelaciju != 0)
                    {
                        vrednostNivelacije = (prodajnaCena - vpCenaArtikla) * kolicinaZaNivelaciju;
                    }
                    else {
                        vrednostNivelacije = 0.00m;
                    }

                    textBoxIznosRabata.Text = string.Format("{0:0.00}", iznosRabata);
                    //textBoxFakturnaCena.Text = string.Format("{0:0.00}", fakturnaCena);
                    //textBoxRabatProcenat.Text = string.Format("{0:0.00}", rabatProcenat);
                    //textBoxKolicina.Text = string.Format("{0:0.00}", kolicina);
                    textBoxNabavnaVrednost.Text = string.Format("{0:0.00}", nabavnaVrednost);
                    //textBoxZavisniTroskovi.Text = string.Format("{0:0.00}", zavisniTroskovi);
                    textBoxNabavnaCena.Text = string.Format("{0:0.00}", nabavnaCena);
                    textBoxProdajnaVrednost.Text = string.Format("{0:0.00}", prodajnaVrednost);
                    //textBoxProdajnaCena.Text = string.Format("{0:0.00}", prodajnaCena);
                    textBoxRazlikaUceni.Text = string.Format("{0:0.00}", ruc);
                    textBoxVrednostNivelacije.Text = string.Format("{0:0.00}", vrednostNivelacije);
                    //textBoxVPCenaArtikla.Text = string.Format("{0:0.00}", vpCenaArtikla);
                    //textBoxKolicinaZaNivelaciju.Text = string.Format("{0:0.00}", kolicinaZaNivelaciju);
                }
                catch (FormatException fe) {
                    labelPoruka.Text = "Minus mora biti na početku!";
                    buttonDodaj.Enabled = false;
                    buttonIzmeni.Enabled = false;
                }
            }
        }

        private void PodesiKontrolePremaProknjizenosti()
        {
            zagObjekat = new ZAG();
            stvObjekat = new STV();
            if (kalkulacijaForma.IDzaglavlja == 0)
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }
            else if (zagObjekat.ProveraProknjizenDokumentIliNe(Convert.ToInt32(kalkulacijaForma.IDzaglavlja)))
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }
            else if (textBoxArtikalNaziv.Text.Length > 0)
            {
                if (stavkaKalkulacije.IDstavke != 0 && stvObjekat.PostojiUBaziIliNeNaOsnovuID(Convert.ToInt32(stavkaKalkulacije.IDstavke)))
                {
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = true;
                }
                else
                {
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = false;
                }
            }
            else
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }

        }

        private void stavkaKalkulacije_Load(object sender, EventArgs e)
        {
            PodesiKontrolePremaProknjizenosti();
        }

        private void stavkaKalkulacije_FormClosing(object sender, FormClosingEventArgs e)
        {
            IDartikla = null;
            IDstavke = 0;
        }

        private void stavkaKalkulacije_Activated(object sender, EventArgs e)
        {
            stvObjekat = new STV();
            stvObjekat.PopuniKontroleUStavkaKalkulacijeForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxFakturnaCena, textBoxRabatProcenat,
                textBoxIznosRabata, textBoxZavisniTroskovi, textBoxNabavnaVrednost, textBoxNabavnaCena, textBoxProdajnaCena, textBoxProdajnaVrednost, textBoxRazlikaUceni,
                textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije);
            PodesavanjeTextBoxovaIzracunavanja();
            PodesiKontrolePremaProknjizenosti();
        }

        private void buttonZatvori_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void VratiSveKontroleNaPocetnuVrednost() {
            comboBoxProdajnaJedinica.SelectedIndex = 0;
            textBoxIzborArtiklaPremaKataloskomBroju.Text = "";
            textBoxIzborArtiklaPremaOznaci.Text = "";
            textBoxKolicina.Text = "0.000";
            textBoxFakturnaCena.Text = "0.00";
            textBoxRabatProcenat.Text = "0.00";
            textBoxIznosRabata.Text = "0.000";
            textBoxZavisniTroskovi.Text = "0.00";
            textBoxNabavnaVrednost.Text = "0.000";
            textBoxNabavnaCena.Text = "0.00";
            textBoxProdajnaCena.Text = "0.00";
            textBoxProdajnaVrednost.Text = "0.000";
            textBoxRazlikaUceni.Text = "0.00";
            textBoxKolicinaZaNivelaciju.Text = "0.000";
            textBoxVrednostNivelacije.Text = "0.00";
            IDartikla = "";
            IDstavke = 0;
        }

        private void TABKaoENTER(KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                SelectNextControl(ActiveControl, true, true, true, true);
            }
        }
        private void comboBoxProdajnaJedinica_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxIzborArtiklaPremaKataloskomBroju_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//ukoliko se unese taster Enter
            {
                this.Cursor = Cursors.WaitCursor;
                artikalObjekat = new Artikal();
                artikalObjekat.PretragaArtikalaStavkaKalkulacije(textBoxIzborArtiklaPremaKataloskomBroju, textBoxIzborArtiklaPremaOznaci, textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla,
                    textBoxKolicinaArtikla, textBoxArtikalNaziv, textBoxMPCenaArtikla, textBoxProdajnaCena, textBoxKolicinaZaNivelaciju);
                stvObjekat = new STV();
                stvObjekat.PopuniKontroleUStavkaKalkulacijeForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                    textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxFakturnaCena, textBoxRabatProcenat,
                    textBoxIznosRabata, textBoxZavisniTroskovi, textBoxNabavnaVrednost, textBoxNabavnaCena, textBoxProdajnaCena, textBoxProdajnaVrednost, textBoxRazlikaUceni,
                    textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije);
                PodesavanjeTextBoxovaIzracunavanja();
                PodesiKontrolePremaProknjizenosti();
                this.Cursor = Cursors.Default;
            }
            if (textBoxIzborArtiklaPremaKataloskomBroju.Text.Length > 0)
            {
                TABKaoENTER(e);
            }
        }
        private void textBoxIzborArtiklaPremaOznaci_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//ukoliko se unese taster Enter
            {
                this.Cursor = Cursors.WaitCursor;
                artikalObjekat = new Artikal();
                artikalObjekat.PretragaArtikalaStavkaKalkulacije(textBoxIzborArtiklaPremaKataloskomBroju, textBoxIzborArtiklaPremaOznaci, textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla,
                    textBoxKolicinaArtikla, textBoxArtikalNaziv, textBoxMPCenaArtikla, textBoxProdajnaCena, textBoxKolicinaZaNivelaciju);
                stvObjekat = new STV();
                stvObjekat.PopuniKontroleUStavkaKalkulacijeForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                    textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxFakturnaCena, textBoxRabatProcenat,
                    textBoxIznosRabata, textBoxZavisniTroskovi, textBoxNabavnaVrednost, textBoxNabavnaCena, textBoxProdajnaCena, textBoxProdajnaVrednost, textBoxRazlikaUceni,
                    textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije);
                PodesavanjeTextBoxovaIzracunavanja();
                PodesiKontrolePremaProknjizenosti();
                this.Cursor = Cursors.Default;
            }
            if (textBoxIzborArtiklaPremaKataloskomBroju.Text.Length > 0)
            {
                TABKaoENTER(e);
            }
        }
        private void textBoxKolicina_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxFakturnaCena_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxRabatProcenat_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxIznosRabata_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxZavisniTroskovi_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxNabavnaVrednost_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxProdajnaCena_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxKolicinaZaNivelaciju_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxVrednostNivelacije_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }

        private void buttonDodaj_Click(object sender, EventArgs e)
        {
            artikalObjekat = new Artikal();
            artikalObjekat.PromenaVPCeneArtikla(textBoxProdajnaCena, Convert.ToInt32(IDartikla));
            zagObjekat = new ZAG();
            zagObjekat.PromenaUZAGPrilikomUnosaNoveStavkeKalkulacija(Convert.ToDecimal(textBoxVrednostNivelacije.Text), Convert.ToInt32(kalkulacijaForma.IDzaglavlja));
            stvObjekat = new STV();
            stvObjekat.UnosNoveStavkeKrozKalkulaciju(comboBoxProdajnaJedinica, textBoxKolicina, textBoxFakturnaCena, textBoxRabatProcenat, textBoxIznosRabata,
                textBoxZavisniTroskovi, textBoxNabavnaVrednost, textBoxNabavnaCena, textBoxProdajnaCena, textBoxProdajnaVrednost, textBoxRazlikaUceni,
                textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije, textBoxPDVstopa);
            VratiSveKontroleNaPocetnuVrednost();
            comboBoxProdajnaJedinica.Focus();
        }

        private void textBoxKolicina_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxFakturnaCena_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxRabatProcenat_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxIznosRabata_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxZavisniTroskovi_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxNabavnaVrednost_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxProdajnaCena_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxKolicinaZaNivelaciju_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }

        private void textBoxKolicina_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxRabatProcenat_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxFakturnaCena_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxIznosRabata_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxZavisniTroskovi_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxNabavnaVrednost_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxProdajnaCena_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxKolicinaZaNivelaciju_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }

        private void buttonIzmeni_Click(object sender, EventArgs e)
        {
            artikalObjekat = new Artikal();
            artikalObjekat.PromenaVPCeneArtikla(textBoxProdajnaCena, Convert.ToInt32(IDartikla));
            zagObjekat = new ZAG();
            zagObjekat.PromenaUZAGPrilikomUnosaNoveStavkeKalkulacija(Convert.ToDecimal(textBoxVrednostNivelacije.Text), Convert.ToInt32(kalkulacijaForma.IDzaglavlja));
            stvObjekat = new STV();
            stvObjekat.IzmenaStavkeKrozKalkulaciju(comboBoxProdajnaJedinica, textBoxKolicina, textBoxFakturnaCena, textBoxRabatProcenat, textBoxIznosRabata,
                textBoxZavisniTroskovi, textBoxNabavnaVrednost, textBoxNabavnaCena, textBoxProdajnaCena, textBoxProdajnaVrednost, textBoxRazlikaUceni,
                textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije, textBoxPDVstopa);
            if (Convert.ToDecimal(textBoxKolicina.Text) > 0)
            {
                this.Close();
            }
        }
    }
}
